home *** CD-ROM | disk | FTP | other *** search
/ The 640 MEG Shareware Studio 5 / The 640 Meg Shareware Studio CD-ROM Volume V (Data Express)(1994).ISO / amiga / tdemo2.lha / ProgrammersInfo / Conference.mod.c next >
C/C++ Source or Header  |  1994-06-05  |  6KB  |  263 lines

  1. /*
  2. ================================================================================
  3.  PROGRAM: Conference Access Lister Module
  4.  VERSION: v1.0
  5. COMPILER: Lattice C v5.10b
  6.     DATE: Oct 15 1992
  7. ================================================================================
  8.  
  9.  
  10. [Conference Access Lister Module v1.0]            By The SkeletoN [__-__-__]
  11. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  12.  
  13. Handle                Location              1st On  LastOn  Calls   Msgs
  14. ====================--====================--======--======--=====--=====
  15. User 1                Location User 1       May 31  Jun 32  1,209  1,484
  16. User 2                Location User 2       Jun 22  Jul 23    323    131
  17. ====================--====================--======--======--=====--=====
  18.  
  19. [Q=Quit]-[Return=Continue]:
  20.  
  21. */
  22. //**********************
  23. //*****  Includes  *****
  24. //**********************
  25.  
  26. #include <proto/all.h>
  27. #include <stdio.h>
  28. #include <time.h>
  29.  
  30. #include <string.h>
  31. #include <tempest/headers.h>
  32.  
  33. //********************************
  34. //*****  Structures/Defines  *****
  35. //********************************
  36.  
  37. //*********************
  38. //*****  Structs  *****
  39. //*********************
  40.  
  41.  struct MyMessage
  42.   {
  43.    struct Message Msg; // for Exec message routines
  44.    ULONG  Command;     // Command to be executed.
  45.  
  46.    char   *text1,
  47.           *text2,
  48.           *text3;
  49.    int    Value1,
  50.           Value2;
  51.    ULONG  LongValue;
  52.    LONGBITS Flags;
  53.    int    carrier;
  54.    struct User       *User;
  55.    struct SystemData *SystemData;
  56.    struct NodeData   *NodeData;
  57.    struct Today      *Today;
  58.   };
  59.  
  60. struct User *User;
  61. struct User User1;
  62. struct MsgPort *MyPort = NULL;
  63. struct MyMessage *msg;
  64. struct MyMessage send;
  65.  
  66. int  DoorStart(TEXT *);
  67. int  DOORIO(VOID);
  68. VOID CloseStuff(VOID);
  69.  
  70. VOID GetPaths(TEXT *,int);
  71. int  hotkey(TEXT *);
  72. VOID pl(TEXT *);
  73. int  CTRLC(VOID);
  74.  
  75. char MyName[60],st[60];
  76.  
  77. //******************
  78. //*****  Main  *****
  79. //******************
  80.  
  81. VOID main(int argc,char *argv[])
  82. {
  83.  char string1[200],shit1[200],Month[5],Day[4],Year[4];
  84.  register int TotalUsers=0,Users=0,Lines=0;
  85.  int stat,fd;
  86.  if(!DoorStart(argv[1])) { PutStr("Tempest Door!\n"); exit(0); }
  87.  
  88. //******************
  89. //*****  Code  *****
  90. //******************
  91.  
  92.  strcpy(shit1,"=========================-=========================--=========--====--====--====\r\n");
  93.  pl("\f[Conference Access Lister Module v3.15]             By Michael Bockert [05-24-94]\r\n");
  94.  pl("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\r\n");
  95.  GetPaths(string1,1);
  96.  strcat(string1,"Accounts.data");
  97.  fd=Open(string1,MODE_OLDFILE);
  98.  pl("Handle                    Location                    Last On   Calls Msgs\r\n");
  99.  pl(shit1);
  100.  
  101.  ACCOUNTS:
  102.  
  103.  stat=Read(fd,&User1, sizeof(struct User));
  104.  if(stat<1)
  105.   {
  106.    Close(fd);
  107.    pl(shit1);
  108.    sprintf(shit1,"Total Users %3d]        Users In Conference %d]\r\n\r\n",TotalUsers,Users);
  109.    pl(shit1);
  110.    CloseStuff();
  111.   }
  112.  if(CTRLC())
  113.   {
  114.    Close(fd);
  115.    pl("\r\nAborting List!\r\n\r\n");
  116.    CloseStuff();
  117.   }
  118.  TotalUsers++;
  119.  if(User1.MsgBase[User->MB_J] != 'N')
  120.   {
  121.    Users++;
  122.    strcpy(string1,ctime(&User1.Time_Last_Logoff));
  123.    strmid(string1,Year,23,2);
  124.    strmid(string1,Month,5,3);
  125.    strmid(string1,Day,9,2);
  126.    sprintf(string1,"%-25.25s %-25.25s  %s %s/%s  %4.4d  %4.4d\r\n",
  127.                     User1.Name,User1.City,Month,Day,Year,User1.Total_Calls,User1.Total_Posts);
  128.    pl(string1);
  129.    Lines++;
  130.   }
  131.  if(Lines+2 > User->Length)
  132.   {
  133.    pl("\r\n[Q=Quit]-[Return=Continue]:");
  134.    AGAIN:
  135.    hotkey(string1);
  136.    if((string1[0] == 'Q') || (string1[0] == 'q'))
  137.     {
  138.      pl("\r\n\r\n");
  139.      Close(fd);
  140.      CloseStuff();
  141.     }
  142.    if(string1[0] != 13)
  143.        goto AGAIN;
  144.    Lines=0;
  145.    pl("\r\n\r\n");
  146.   }
  147.  goto ACCOUNTS;
  148. }
  149.  
  150.  
  151.  
  152.  
  153.  
  154.  
  155.  
  156. //************************
  157. //*****  Door Start  ***** // MUST BE INCLUDED IN ALL DOORS!
  158. //************************
  159.  
  160. int DoorStart(TEXT *node)
  161. {
  162.  struct MsgPort *HisPort;
  163.  send.carrier=0;
  164.  sprintf(st,"%s:TEMPEST_DOOR",node);
  165.  HisPort = FindPort(st);
  166.  if(HisPort==NULL) return (FALSE);
  167.  sprintf(MyName,"%s:DOOR_PORT",node);
  168.  MyPort = CreatePort(MyName,0L);
  169.  if(MyPort==NULL)
  170.   {
  171.    PutStr("Cant open port");
  172.    return(int)FALSE;
  173.   }
  174.  DOORIO();
  175.  User=*&send.User;
  176.  return (int)TRUE;
  177. }
  178.  
  179. //********************
  180. //*****  DoorIO  ***** // MUST BE INCLUDED IN ALL DOORS!
  181. //********************
  182.  
  183. int DOORIO(VOID)
  184. {
  185.  struct MsgPort *HisPort;
  186.  if(send.carrier) return(0);
  187.  HisPort = FindPort(st);
  188.  if(HisPort!=NULL)
  189.   {
  190.    send.Msg.mn_Node.ln_Type = NT_MESSAGE;
  191.    send.Msg.mn_Length = sizeof(send);
  192.    send.Msg.mn_ReplyPort = MyPort;
  193.    send.carrier=0;
  194.    PutMsg((struct MsgPort *)HisPort,(struct Message *)&send);
  195.    Wait(1 << MyPort->mp_SigBit);
  196.    GetMsg(MyPort);
  197.    if(send.carrier) CloseStuff();
  198.    return(1);
  199.   }
  200.  return(0);
  201. }
  202.  
  203. //*************************
  204. //*****  Close Stuff  ***** // MUST BE INCLUDED IN ALL DOORS!
  205. //*************************
  206.  
  207. VOID CloseStuff(VOID)
  208. {
  209.  send.Command=999;
  210.  DOORIO();
  211.  while(msg=(struct MyMessage *)GetMsg(MyPort)) ReplyMsg((struct Message *)msg);
  212.  if(MyPort) DeletePort(MyPort);
  213.  exit(0);
  214. }
  215.  
  216.  
  217. //*********************
  218. //*****  Hot Key  ***** // Command 16
  219. //*********************
  220.  
  221. int hotkey(TEXT *character)
  222. {
  223.  send.Command=16;
  224.  send.text1=character;
  225.  DOORIO();
  226.  return((int)character[0]);
  227. }
  228.  
  229. //***********************
  230. //*****  Get Paths  ***** // Command 30
  231. //***********************
  232.  
  233. VOID GetPaths(TEXT *s,int opt)
  234. {
  235.  send.Command=30;
  236.  send.Value1=opt;
  237.  strcpy(s,NULL);
  238.  send.text1=s;
  239.  DOORIO();
  240. }
  241.  
  242. //*****************************
  243. //*****  PL (Print Line)  ***** // Command 1
  244. //*****************************
  245.  
  246. VOID pl(TEXT *string)
  247. {
  248.  send.Command=1;
  249.  send.text1=string;
  250.  DOORIO();
  251. }
  252.  
  253. //*************************
  254. //*****  CTRLC CHECK  ***** // Command 10
  255. //*************************
  256.  
  257. int CTRLC(VOID)
  258. {
  259.  send.Command=10;
  260.  DOORIO();
  261.  return(send.Value1);
  262. }
  263.